/*
 * Bigrama.hpp
 *
 *  Created on: 27/11/2014
 *      Author: nico
 */

#ifndef TRUNK_TP_DATOS_SRC_BIGRAMA_HPP_
#define TRUNK_TP_DATOS_SRC_BIGRAMA_HPP_

#include <string>
#include <map>
#include "Unigrama.hpp"
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/string.hpp>

using namespace std;

class Bigrama {

private:
	friend class boost::serialization::access;
		template <class Archive>
		friend void serialize (Archive &ar, Bigrama& bigrama, const unsigned int version){
			ar & bigrama.clave;
			ar & bigrama.terminos;
		}

	string clave;
	map <string,Unigrama*> terminos;

public:
	Bigrama ();
	Bigrama (string clave);
	Bigrama (const Bigrama& bigrama); //constructor de copia
	~Bigrama();

	string getClave();
	bool existeTermino (string termino);
	void agregarTermino (string termino);
	void agregarTermino (Unigrama* unigrama);
	void incOcurrencias (string* termino);
	Ocurrencias getOcurrencias (string* termino);
	void sumarOcurrencias (string termino, Ocurrencias ocurrencias);
	Ocurrencias getSumatoriaBigramas ();
	int getCantTerminosDistintos();
	Probabilidad getProbabilidad (string* termino);
	map <string,Unigrama*>:: iterator getIteradorTerminos();
	map <string,Unigrama*>:: iterator ultimoTermino ();
	friend bool operator< (const Bigrama& u1, const Bigrama& u2);

	//TODO int getHash (string* termino);

};

#endif /* TRUNK_TP_DATOS_SRC_BIGRAMA_HPP_ */
